﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CondominioG1.Persistencia.NHibernate;
using CondominioG1.Dominio;

namespace CondominioG1.Negocio
{
    public class ViviendaService
    {
        // Dependencias con la capa de persistencia
        public ResidenteDAO ResidenteDAO { get; set; }

        // Mapeo de funcionalidades
        public Vivienda RegistrarVivienda(String Codigo
                                    , String Ubicacion
                                    , Int32 Numero
                                    , Decimal Metraje
                                    , String Tipo
                                    , String ResidenteCodigo
                                    , String PropietarioCodigo
                                    )
        {
            // Validación de UBICACIÓN
            if (null == Ubicacion || String.Empty.Equals(Ubicacion))
                throw new Exception("El dato UBICACION es obligatorio");
            // Validación de NUMERO
            if (null == Numero)
                throw new Exception("El dato NUMERO es obligatorio");
            // Validación de METRAJE
            if (null == Metraje)
                throw new Exception("El dato METRAJE es obligatorio");
            // Validación de TIPO
            if (null == Tipo || String.Empty.Equals(Tipo))
                throw new Exception("El dato TIPO es obligatorio");
            //Validación de RESIDENTE
            Residente residente = ResidenteDAO.Obtener(ResidenteCodigo);
            if (residente == null)
                throw new Exception("Residente inexistente");
            //Validación de PROPIETARIO
            Residente propietario = ResidenteDAO.Obtener(PropietarioCodigo);
            if (propietario == null)
                throw new Exception("Propietario inexistente");

            // Generar nueva secuencia para Vivienda
            ViviendaDAO ViviendaDAO = new ViviendaDAO();

            Vivienda Vivienda = new Vivienda();
            Vivienda.Codigo = Codigo;
            Vivienda.Ubicacion = Ubicacion;
            Vivienda.Numero = Numero;
            Vivienda.Metraje = Metraje;
            Vivienda.Tipo = Tipo;
            Vivienda.Residente = residente;
            Vivienda.Propietario = propietario;

            Vivienda ViviendaCreado = ViviendaDAO.Crear(Vivienda);
            return ViviendaCreado;
        }

        public Vivienda ModificarVivienda(String Codigo
                                        , String Ubicacion
                                        , Int32 Numero
                                        , Decimal Metraje
                                        , String Tipo
                                        , String ResidenteCodigo
                                        , String PropietarioCodigo
                                       )
        {
            // Validacion de existencia de Vivienda
            ViviendaDAO ViviendaDAO = new ViviendaDAO();
            Vivienda ViviendaExistente = ViviendaDAO.Obtener(Codigo);
            if (null == ViviendaExistente)
                throw new Exception("El Vivienda NO EXISTE...");

            // Validación de UBICACIÓN
            if (null == Ubicacion || String.Empty.Equals(Ubicacion))
                throw new Exception("El dato UBICACION es obligatorio");
            // Validación de NUMERO
            if (null == Numero)
                throw new Exception("El dato NUMERO es obligatorio");
            // Validación de METRAJE
            if (null == Metraje)
                throw new Exception("El dato METRAJE es obligatorio");
            // Validación de TIPO
            if (null == Tipo || String.Empty.Equals(Tipo))
                throw new Exception("El dato TIPO es obligatorio");
            //Validación de RESIDENTE
            Residente residente = ResidenteDAO.Obtener(ResidenteCodigo);
            if (residente == null)
                throw new Exception("Residente inexistente");
            //Validación de PROPIETARIO
            Residente propietario = ResidenteDAO.Obtener(PropietarioCodigo);
            if (propietario == null)
                throw new Exception("Propietario inexistente");

            Vivienda Vivienda = new Vivienda();
            Vivienda.Codigo = Codigo;
            Vivienda.Ubicacion = Ubicacion;
            Vivienda.Numero = Numero;
            Vivienda.Metraje = Metraje;
            Vivienda.Tipo = Tipo;
            Vivienda.Residente = residente;
            Vivienda.Propietario = propietario;

            Vivienda ViviendaModificado = ViviendaDAO.Modificar(Vivienda);
            return ViviendaModificado;
        }

        public Vivienda EliminarVivienda(String Codigo)
        {
            // Validacion de existencia de Vivienda
            ViviendaDAO ViviendaDAO = new ViviendaDAO();
            Vivienda ViviendaExistente = ViviendaDAO.Obtener(Codigo);
            if (null == ViviendaExistente)
                throw new Exception("La Vivienda NO EXISTE...");

            Vivienda Vivienda = new Vivienda();
            Vivienda = ViviendaExistente;

            ViviendaDAO.Eliminar(Vivienda);
            return Vivienda;
        }
    }
}

